package com.ffggffgfv.backend.service;

import com.ffggffgfv.backend.dto.PageResult;
import com.ffggffgfv.backend.dto.RolePermissionDTO;
import com.ffggffgfv.backend.entity.Permission;
import com.ffggffgfv.backend.entity.Role;

import java.util.List;

/**
 * 角色服务接口
 */
public interface RoleService {

    /**
     * 分页查询角色列表
     *
     * @param name     角色名称（可选）
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 角色列表
     */
    PageResult<Role> findByPage(String name, int pageNum, int pageSize);

    /**
     * 根据ID查询角色
     *
     * @param id 角色ID
     * @return 角色对象
     */
    Role findById(Long id);

    /**
     * 创建角色
     *
     * @param role 角色对象
     * @return 创建的角色对象
     */
    Role createRole(Role role);

    /**
     * 更新角色
     *
     * @param id   角色ID
     * @param role 角色对象
     * @return 更新后的角色对象
     */
    Role updateRole(Long id, Role role);

    /**
     * 判断角色编码是否已存在
     *
     * @param code 角色编码
     * @return 是否存在
     */
    boolean isCodeExists(String code);

    /**
     * 分配角色权限
     *
     * @param roleId            角色ID
     * @param rolePermissionDTO 权限ID列表DTO
     * @return 是否成功
     */
    boolean assignPermissions(Long roleId, RolePermissionDTO rolePermissionDTO);

    /**
     * 获取角色的权限列表
     *
     * @param roleId 角色ID
     * @return 权限列表
     */
    List<Permission> getPermissions(Long roleId);

    /**
     * 获取角色的权限ID列表
     *
     * @param roleId 角色ID
     * @return 权限ID列表
     */
    List<Long> getPermissionIds(Long roleId);
}
